doakey3 / dashtable Goto Github PK
View Code? Open in Web Editor NEWConvert an HTML table into an ASCII table: Colspan and Rowspan allowed!
License: MIT License
Convert an HTML table into an ASCII table: Colspan and Rowspan allowed!
License: MIT License
Input table
<table border=1>
<caption>A test table witd merged cells</caption>
<tr>
<td>Name</td>
<td>Height</td>
<td>Weight</td>
<td>Jobs</td>
<td>Hobby</td>
</tr>
<tr>
<td>Jack</td>
<td colspan=2 rowspan=2>
Undisclosed
foo
bar
</td>
<td>graphist</td>
<td>gardener</td>
</tr>
<tr>
<td>Frank</td>
<td>developer</td>
<td>painter</td>
</tr>
<tr>
<td>Jenny </td>
<td>1.6m</td>
<td>52Kg</td>
<td>commercial</td>
<td>jogger</td>
</tr>
</table>
Output
+-----+------------+------+----------+--------+
|Name |Height |Weight|Jobs |Hobby |
+-------------------+-----------+------+----------+--------+
|Jack |Undisclosed|graphist |gardener|
+-----+ +----------+--------+
|Frank|foo |developer |painter |
+-----+------------+------+----------+--------+
|Jenny|1.6mbar |52Kg |commercial|jogger |
+-----+------------+------+----------+--------+
Nice module! I think this is very nearly compatible with python 2. It would just take adding
from __future__ import print_function, division
as the first import in the appropriate places. I had an error crop up when running in python 2 where a float was returned where an int was required (in dashutils/center_line.py). Works great in python 3, but would be a nice feature to make it backward compatible.
Thanks for this great library, is the only one I found to print tables allowing spans, a great addon for complex .rst tables.
I would like the ability to make spans that can be bigger than two consecutive cells.
Right now when I try that I'm getting ERROR: This span is not valid:
They actually don't break the rule of being a rectangular shape, so I was expecting it would just work.
A minimal example:
import dashtable
spans = [
[ [1, 0], [3, 0] ]
]
table = [
["Header 1", "Header 2", "Header 3"],
["row header", "Data1", "Data2"],
["", "Data3", "Data4"],
["", "Data5", "Data6"],
["row header2", "Data7", "Data8"],
]
print(dashtable.data2rst(table, spans))
I would like to obtain as output:
+-------------+----------+----------+
| Header 1 | Header 2 | Header 3 |
+=============+==========+==========+
| row header | Data1 | Data2 |
| +----------+----------+
| | Data3 | Data4 |
| +----------+----------+
| | Data5 | Data6 |
+-------------+----------+----------+
| row header2 | Data7 | Data8 |
+-------------+----------+----------+
Do you think is possible to implement?
thanks for considering
dashtable.data2rst.TableContentError: Table must be a list of lists of strings
There may be a technical reason why, but it seems like forcing the input to be strings only could be avoided if numbers were cast using str().
That is what I do in my code to "fix" this error.
Thanks for considering the improvement!
<table>
<tr>
<td>foo</td>
<td></td>
</tr>
</table>
+-+-+
|a| |
+-+-+
or
+-++
|a||
+-++
It would be useful if there was an option to center strings when using data2rst(). Due to the variable width, it would be difficult to do this outside of dashtable.
Thank you for considering.
Not sure if it is something I am doing wrong, but I've noticed that accented characters seem to throw off the spacing.
+-----+------------------------+-------+
| ID | Name | Email |
+=====+========================+=======+
| x6 | Hervé de Miremont | |
+-----+------------------------+-------+
| x9 | Gilles Sansac | |
+-----+------------------------+-------+
| x1 | André Monluc | |
+-----+------------------------+-------+
| x8 | Claude Ambleville | |
+-----+------------------------+-------+
| x2 | Jean de Sisieulx | |
+-----+------------------------+-------+
| x10 | André de Boutteville | |
+-----+------------------------+-------+
| x3 | Antonie de Veniers | |
+-----+------------------------+-------+
| x4 | Jean-Louis de Clermont | |
+-----+------------------------+-------+
| x5 | André de Bouillon | |
+-----+------------------------+-------+
| x7 | Jacques de Sarzay | |
+-----+------------------------+-------+
The names are stored in a json file and loaded json.load().
"id": "x10",
"name": "Andr\u00c3\u00a9 de Boutteville",
Thank you.
Try attached HTML, it is exported from an e-mail generated by MS Office.
Only the column titles and 2/3 of the first row get printed, the rest is empty cells.
from dashtable import html2rst
filepath = "number.html"
print(html2rst(filepath, force_headers=False))
I tested the lib using a sample table from the bootstrap website. For some reason the first and last characters of each cell are missing?
Any idea?
<table class="table">
<caption>
Optional table caption.
</caption>
<thead>
<tr>
<th>#</th>
<th>First Name</th>
<th>Last Name</th>
<th>Username</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
html2rst(s,force_headers=False)
+---+---------+--------+-------+
| | rst Nam | st Nam | ernam |
+===+=========+========+=======+
| | | | |
+---+---------+--------+-------+
| | | | |
+---+---------+--------+-------+
| | | | |
+---+---------+--------+-------+'
I upgraded from 1.3.4 to 1.4.4 and I noticed all calls to data2rst() were now causing errors.
ERROR: Spans must be a [Row, Column] pair of integers
Doing a little research, it appears that the 'spans' parameter is now required, though it seems to have a default internally. Adding spans=[] fixes the issue and allows the table to render.
Sample code using Python 3.6.5 and dashtable 1.4.4:
import dashtable
table = [["H1", "H2", "H3", "H4", "H5"]]
table.append(["1", "2", "3", "4", "5"])
table.append(["1", "2", "3", "4", "5"])
print(dashtable.data2rst(table))
print(dashtable.data2rst(table, spans=[]))
Output:
ERROR: Spans must be a [Row, Column] pair of integers
+----+----+----+----+----+
| H1 | H2 | H3 | H4 | H5 |
+====+====+====+====+====+
| 1 | 2 | 3 | 4 | 5 |
+----+----+----+----+----+
| 1 | 2 | 3 | 4 | 5 |
+----+----+----+----+----+
I didn't see any sign this was intentional, and the docs still indicate it is optional.
table (list of lists of str) –
spans (list of lists of lists of int, optional) –
http://dashtable.readthedocs.io/en/latest/Code.html#dashtable.data2rst
Using any colors, either via colorit, click.style or even via term escape sequences directly, in the cell text will break alignment of the cell.
Hi
Thank you for this great tool.
I tried to use the html2rst/htm2md functions but I think I met an issue.
I have got an html table which looks like this
<style type="text/css">
table {vertical-align: middle;margin: 0 auto;font-size:12px;color:#333333;width:100%;border-width: 1px;border-color: #729ea5;border-collapse: collapse;}
table th {font-size:12px;background-color:#acc8cc;border-width: 1px;padding: 8px;border-style: solid;border-color: #729ea5;text-align:left;}
table tr {background-color:#ffffff;}
table td {font-size:12px;border-width: 1px;padding: 0px;border-style: solid;border-color: #729ea5;}
</style>
<table>
<tr><td rowspan="16">Jasmin (M, 2018)</td><td rowspan="8">Tassou (M, 2020)</td><td rowspan="4">Bastidon (M, 2017)</td><td rowspan="2">Kappa (M, 2017)</td><td rowspan="1">Savary (M, 2015)</td></tr>
<tr><td rowspan="1">Rolex (F, 2012)</td></tr>
<tr><td rowspan="2"><b>Coquine (F, 2021)</b></td><td rowspan="1">Jérico (M, 2012)</td></tr>
<tr><td rowspan="1">Apostrophe (F, 2020)</td></tr>
<tr><td rowspan="4">Danette (F, 2013)</td><td rowspan="2">Magritt (M, 2019)</td><td rowspan="1">Sarcouf (M, 2013)</td></tr>
<tr><td rowspan="1">Joufflu (F, 2012)</td></tr>
<tr><td rowspan="2">Xio (F, 2020)</td><td rowspan="1">Caleu (M, 2017)</td></tr>
<tr><td rowspan="1">Sirène (F, 2013)</td></tr>
<tr><td rowspan="8">Epinette (F, 2020)</td><td rowspan="4">Beaulinge (M, 2015)</td><td rowspan="2">Ramsès (M, 2019)</td><td rowspan="1">Eigouzo (M, 2015)</td></tr>
<tr><td rowspan="1">Yoshi (F, 2015)</td></tr>
<tr><td rowspan="2">Chiper (F, 2013)</td><td rowspan="1">Gastounet (M, 2020)</td></tr>
<tr><td rowspan="1">Trampoline (F, 2012)</td></tr>
<tr><td rowspan="4">Garance (F, 2018)</td><td rowspan="2">Octave (M, 2018)</td><td rowspan="1">Benvengu (M, 2020)</td></tr>
<tr><td rowspan="1">Prune (F, 2017)</td></tr>
<tr><td rowspan="2">Eve (F, 2014)</td><td rowspan="1">Youka (M, 2012)</td></tr>
<tr><td rowspan="1">Kalamity (F, 2020)</td></tr>
<tr><td rowspan="16">Etoile (F, 2011)</td><td rowspan="8">Sauron (M, 2021)</td><td rowspan="4">QuoVadis (M, 2020)</td><td rowspan="2">Hélico (M, 2011)</td><td rowspan="1">Arlesien (M, 2020)</td></tr>
<tr><td rowspan="1">Kalmie (F, 2016)</td></tr>
<tr><td rowspan="2">Lumière (F, 2010)</td><td rowspan="1">Talleyran (M, 2021)</td></tr>
<tr><td rowspan="1"><b>Coquine (F, 2021)</b></td></tr>
<tr><td rowspan="4">Soupolait (F, 2019)</td><td rowspan="2">Darius (M, 2010)</td><td rowspan="1">Camai_2 (M, 2013)</td></tr>
<tr><td rowspan="1">Rutabaga (F, 2020)</td></tr>
<tr><td rowspan="2">Ursulita (F, 2021)</td><td rowspan="1">Papagai (M, 2019)</td></tr>
<tr><td rowspan="1">Biloute (F, 2010)</td></tr>
<tr><td rowspan="8">Choupette (F, 2021)</td><td rowspan="4">Faucon (M, 2012)</td><td rowspan="2">Felin (M, 2012)</td><td rowspan="1">Papagai (M, 2019)</td></tr>
<tr><td rowspan="1">Caxixi (F, 2014)</td></tr>
<tr><td rowspan="2">Caroline (F, 2011)</td><td rowspan="1">Hussard (M, 2014)</td></tr>
<tr><td rowspan="1">Stich (F, 2015)</td></tr>
<tr><td rowspan="4">Anis (F, 2014)</td><td rowspan="2">Bariton (M, 2013)</td><td rowspan="1">Raimu (M, 2018)</td></tr>
<tr><td rowspan="1">Coach (F, 2011)</td></tr>
<tr><td rowspan="2">Salopette (F, 2018)</td><td rowspan="1">Liquis (M, 2020)</td></tr>
<tr><td rowspan="1">Rutabaga (F, 2020)</td></tr>
</table>
and I tried to convert it to rst and I have this result
We can see that rowspan are not correct
>>> print(dashtable.html2rst(an.pedigree("html")))
+------------------+---------------------+---------------------+-----------------------+-----------------------+
| Jasmin (M, 2018) | Tassou (M, 2020) | Bastidon (M, 2017) | Kappa (M, 2017) | Savary (M, 2015) |
| | | | +-----------------------+
| | | | | Rolex (F, 2012) |
| | | +-----------------------+-----------------------+
| | | | **Coquine (F, 2021)** | Jérico (M, 2012) |
| | | +-----------------------+-----------------------+
| | | | | Apostrophe (F, 2020) |
| | +---------------------+-----------------------+-----------------------+
| | | Danette (F, 2013) | Magritt (M, 2019) | Sarcouf (M, 2013) |
| | +---------------------+-----------------------+-----------------------+
| | | | | Joufflu (F, 2012) |
| | +---------------------+-----------------------+-----------------------+
| | | | Xio (F, 2020) | Caleu (M, 2017) |
| | +---------------------+-----------------------+-----------------------+
| | | | | Sirène (F, 2013) |
| +---------------------+---------------------+-----------------------+-----------------------+
| | Epinette (F, 2020) | Beaulinge (M, 2015) | Ramsès (M, 2019) | Eigouzo (M, 2015) |
| | | +-----------------------+-----------------------+
| | | | | Yoshi (F, 2015) |
| | +---------------------+-----------------------+-----------------------+
| | | | Chiper (F, 2013) | Gastounet (M, 2020) |
| | +---------------------+-----------------------+-----------------------+
| | | | | Trampoline (F, 2012) |
| +---------------------+---------------------+-----------------------+-----------------------+
| | | Garance (F, 2018) | Octave (M, 2018) | Benvengu (M, 2020) |
| | +---------------------+-----------------------+-----------------------+
| | | | | Prune (F, 2017) |
| +---------------------+---------------------+-----------------------+-----------------------+
| | | | Eve (F, 2014) | Youka (M, 2012) |
| +---------------------+---------------------+-----------------------+-----------------------+
| | | | | Kalamity (F, 2020) |
+------------------+---------------------+---------------------+-----------------------+-----------------------+
| Etoile (F, 2011) | Sauron (M, 2021) | QuoVadis (M, 2020) | Hélico (M, 2011) | Arlesien (M, 2020) |
| | | | +-----------------------+
| | | | | Kalmie (F, 2016) |
| | | +-----------------------+-----------------------+
| | | | Lumière (F, 2010) | Talleyran (M, 2021) |
| | | +-----------------------+-----------------------+
| | | | | **Coquine (F, 2021)** |
| | +---------------------+-----------------------+-----------------------+
| | | Soupolait (F, 2019) | Darius (M, 2010) | Camai_2 (M, 2013) |
| | +---------------------+-----------------------+-----------------------+
| | | | | Rutabaga (F, 2020) |
| | +---------------------+-----------------------+-----------------------+
| | | | Ursulita (F, 2021) | Papagai (M, 2019) |
| | +---------------------+-----------------------+-----------------------+
| | | | | Biloute (F, 2010) |
| +---------------------+---------------------+-----------------------+-----------------------+
| | Choupette (F, 2021) | Faucon (M, 2012) | Felin (M, 2012) | Papagai (M, 2019) |
| | | +-----------------------+-----------------------+
| | | | | Caxixi (F, 2014) |
| | +---------------------+-----------------------+-----------------------+
| | | | Caroline (F, 2011) | Hussard (M, 2014) |
| | +---------------------+-----------------------+-----------------------+
| | | | | Stich (F, 2015) |
| +---------------------+---------------------+-----------------------+-----------------------+
| | | Anis (F, 2014) | Bariton (M, 2013) | Raimu (M, 2018) |
| | +---------------------+-----------------------+-----------------------+
| | | | | Coach (F, 2011) |
| +---------------------+---------------------+-----------------------+-----------------------+
| | | | Salopette (F, 2018) | Liquis (M, 2020) |
| +---------------------+---------------------+-----------------------+-----------------------+
| | | | | Rutabaga (F, 2020) |
+------------------+---------------------+---------------------+-----------------------+-----------------------+
the result with htm2md looks like this
rowspan does not seem to be correct, and html2md should not add a header (is it mandatory ?)
>>> print(dashtable.html2md(an.pedigree("html")))
| Jasmin (M, 2018) | Tassou (M, 2020) | Bastidon (M, 2017) | Kappa (M, 2017) | Savary (M, 2015) |
|------------------|---------------------|---------------------|-----------------------|-----------------------|
| | | | | Rolex (F, 2012) |
| | | | **Coquine (F, 2021)** | Jérico (M, 2012) |
| | | | | Apostrophe (F, 2020) |
| | | Danette (F, 2013) | Magritt (M, 2019) | Sarcouf (M, 2013) |
| | | | | Joufflu (F, 2012) |
| | | | Xio (F, 2020) | Caleu (M, 2017) |
| | | | | Sirène (F, 2013) |
| | Epinette (F, 2020) | Beaulinge (M, 2015) | Ramsès (M, 2019) | Eigouzo (M, 2015) |
| | | | | Yoshi (F, 2015) |
| | | | Chiper (F, 2013) | Gastounet (M, 2020) |
| | | | | Trampoline (F, 2012) |
| | | Garance (F, 2018) | Octave (M, 2018) | Benvengu (M, 2020) |
| | | | | Prune (F, 2017) |
| | | | Eve (F, 2014) | Youka (M, 2012) |
| | | | | Kalamity (F, 2020) |
| Etoile (F, 2011) | Sauron (M, 2021) | QuoVadis (M, 2020) | Hélico (M, 2011) | Arlesien (M, 2020) |
| | | | | Kalmie (F, 2016) |
| | | | Lumière (F, 2010) | Talleyran (M, 2021) |
| | | | | **Coquine (F, 2021)** |
| | | Soupolait (F, 2019) | Darius (M, 2010) | Camai_2 (M, 2013) |
| | | | | Rutabaga (F, 2020) |
| | | | Ursulita (F, 2021) | Papagai (M, 2019) |
| | | | | Biloute (F, 2010) |
| | Choupette (F, 2021) | Faucon (M, 2012) | Felin (M, 2012) | Papagai (M, 2019) |
| | | | | Caxixi (F, 2014) |
| | | | Caroline (F, 2011) | Hussard (M, 2014) |
| | | | | Stich (F, 2015) |
| | | Anis (F, 2014) | Bariton (M, 2013) | Raimu (M, 2018) |
| | | | | Coach (F, 2011) |
| | | | Salopette (F, 2018) | Liquis (M, 2020) |
| | | | | Rutabaga (F, 2020) |
code
import dashtable
if __name__ == '__main__':
# print(html_to_markdown('''
# print(dashtable.html2md('''
# print(dashtable.html2data('''
print(dashtable.html2rst('''
<table class="detailList col01" style="background-color:#fff;">
<thead>
<tr>
<th></th>
<th class="step" scope="col">
<div class="text">データ定額<br>440プラン</div>
</th>
<th scope="col">
<div class="text"><span class="linkTxt typeA"><a href="/domestic/service/vita" target="_blank"
class="bgBlue newWindow" rel="noopener noreferrer">ビタッ!<br>プラン</a></span></div>
</th>
<th scope="col">
<div class="text"><span class="linkTxt typeA"><a href="/domestic/planlp_jiyujizai_super" target="_blank"
class="bgBlue newWindow" rel="noopener noreferrer">自由自在<br>プラン</a></span></div>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<div class="text">Rakuten<br>最強プラン</div>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<div class="text">ahamo</div>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<div class="text">LINEMO</div>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<div class="text">povo2.0</div>
</th>
</tr>
<tr style="border-top:0; padding-top:0;">
<th style="border-left:0;"></th>
<th class="step" scope="col">
<ul class="planFunctionIcon">
<li class="data">データ</li>
</ul>
</th>
<th scope="col">
<ul class="planFunctionIcon">
<li class="data">データ</li>
</ul>
</th>
<th scope="col">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row" colspan="8">月額基本料金</th>
</tr>
<tr>
<th scope="row">~100MB<br>まで</th>
<td rowspan="2" style="background-color:#ffffcc;"><strong>440円</strong></td>
<td><strong>198円</strong></td>
<td rowspan="2">
<div class="secBoxCompareBalloonCnt">
<p>100MB未満の月は<br><strong>290円!</strong></p>
</div>
<div class="text">
<p><strong>550円~</strong></p>
</div>
</td>
<td rowspan="4"><strong>1,078円</strong></td>
<td rowspan="8"><strong>2,970円</strong></td>
<td rowspan="4"><strong>990円</strong></td>
<td rowspan="2">
<div class="text">
<p><strong>390円</strong></p>
</div>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">7日間</li>
</ul>
</td>
</tr>
<tr>
<th scope="row">~1GB</th>
<td rowspan="2"><strong>770円</strong></td>
</tr>
<tr>
<th scope="row">~2GB</th>
<td rowspan="2" style="background-color:#ffffcc;"><strong>580円</strong></td>
<td rowspan="2"><strong>770円</strong></td>
<td rowspan="2"><strong>990円</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">30日間</li>
</ul>
</td>
</tr>
<tr>
<th scope="row">~3GB</th>
<td rowspan="2"><strong>1,320円</strong></td>
</tr>
<tr>
<th scope="row">~5GB</th>
<td rowspan="2" style="background-color:#ffffcc; border:3px solid #FFCD00;"><strong>880円</strong></td>
<td rowspan="2"><strong>990円</strong></td>
<td rowspan="4"><strong>2,178円</strong></td>
<td rowspan="4"><strong>2,728円</strong></td>
<td rowspan="4"><strong>2,700円</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">30日間</li>
</ul>
</td>
</tr>
<tr>
<th scope="row">~7GB</th>
<td rowspan="2"><strong>2,310円</strong></td>
</tr>
<tr>
<th scope="row">~10GB</th>
<td rowspan="2" style="background-color:#ffffcc; border:3px solid #FFCD00;"><strong>1,980円</strong></td>
<td rowspan="2"><strong>2,190円</strong><br>5分かけ放題付!</td>
</tr>
<tr>
<th scope="row">~20GB</th>
<td>15GBまで<br><strong>3,300円</strong></td>
</tr>
<tr>
<th scope="row">~30GB</th>
<td rowspan="2" style="background-color:#ffffcc;"><strong>4,980円</strong></td>
<td><strong>5,775円</strong></td>
<td rowspan="2"><strong>5,990円</strong><br>5分かけ放題付!</td>
<td rowspan="2"><strong>3,278円</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">パートナー回線エリアは最大1Mbpsで使い放題</li>
</ul>
</td>
<td rowspan="2"><strong>4,950円</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">オプション<br>100GBまで</li>
</ul>
</td>
<td rowspan="2">+550円/1GB<br>で追加可</td>
<td rowspan="2"><strong>6,490円</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">60GB/<br>90日間</li>
</ul>
</td>
</tr>
<tr>
<th scope="row">~50GB</th>
<td style="background-color: #f7f7f7;">+330円/1GB<br>で追加可</td>
</tr>
<tr>
<th scope="row" colspan="8">通話料・オプション</th>
</tr>
<tr>
<th scope="row">回線</th>
<td style="background-color:#ffffcc;">NTTドコモ</td>
<td>NTTドコモ<br>ソフトバンク</td>
<td>NTTドコモ</td>
<td>楽天</td>
<td>NTTドコモ</td>
<td>ソフトバンク</td>
<td>au</td>
</tr>
<tr>
<th scope="row">通話料</th>
<td rowspan="2" style="background-color:#ffffcc;">–</td>
<td rowspan="2">–</td>
<td><strong>9円/30秒</strong><br>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1"><strong>専用アプリ<br>不要</strong></li>
</ul>
</td>
<td><strong>22円/30秒</strong><br>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">専用アプリ利用で国内通話かけ放題</li>
</ul>
</td>
<td><strong>22円/30秒</strong><br>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">国内通話5分まで無料</li>
</ul>
</td>
<td><strong>22円/30秒</strong></td>
<td><strong>22円/30秒</strong></td>
</tr>
<tr>
<th scope="row">通話<br>オプション<br><strong>※1</strong></th>
<td>5分かけ放題<br><strong>500円/月</strong><br>完全かけ放題<br><strong>1,480円/月</strong></td>
<td>15分かけ放題<br><strong>1,100円/月</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">専用アプリ不要</li>
</ul>
</td>
<td>かけ放題<br><strong>1,100円/月</strong></td>
<td>5分/回以内<br>かけ放題<br><strong>550円/月</strong><br>通話定額<br><strong>1,650円/月</strong></td>
<td>5分以内かけ放題<br><strong>550円/月</strong><br>通話かけ放題<br><strong>1,650円/月</strong></td>
</tr>
<tr>
<th scope="row">データ追加</th>
<td style="background-color:#ffffcc;"><strong>200円/1GB</strong></td>
<td><strong>330円/1GB</strong></td>
<td><strong>200円/1GB</strong></td>
<td><strong>–</strong>
<ul class="list typeB">
<li data-number="1">0GB~無制限まで従量課金</li>
</ul>
</td>
<td><strong>550円/1GB</strong></td>
<td><strong>550円/1GB</strong></td>
<td><strong>390円/1GB~</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">1・3・20・60GB<br>単位で追加可</li>
</ul>
</td>
</tr>
<tr>
<th scope="row">SMS追加<br><strong>※2</strong></th>
<td style="background-color:#ffffcc; border:3px solid #FFCD00;"><strong>50円/月</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">1GB~7GBのみ</li>
</ul>
</td>
<td><strong>154円/月</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">ドコモ回線のみ</li>
</ul>
</td>
<td><strong>–</strong>
<ul class="list typeB">
<li data-number="1">月額基本料金に含まれる</li>
</ul>
</td>
<td><strong>–</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">月額基本料金に含まれる</li>
</ul>
</td>
<td><strong>–</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">月額基本料金に含まれる</li>
</ul>
</td>
<td><strong>–</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">月額基本料金に含まれる</li>
</ul>
</td>
<td><strong>–</strong>
<ul class="list typeB" style="margin-top: 0.1rem;">
<li data-number="1">月額基本料金に含まれる</li>
</ul>
</td>
</tr>
<tr>
<th></th>
<th class="step" scope="col">
<div class="text">データ定額<br>440プラン</div>
</th>
<th scope="col">
<div class="text"><span class="linkTxt typeA"><a href="/domestic/service/vita" target="_blank"
class="bgBlue newWindow" rel="noopener noreferrer">ビタッ!<br>プラン</a></span></div>
</th>
<th scope="col">
<div class="text"><span class="linkTxt typeA"><a href="/domestic/planlp_jiyujizai_super" target="_blank"
class="bgBlue newWindow" rel="noopener noreferrer">自由自在<br>プラン</a></span></div>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<div class="text">Rakuten<br>最強プラン</div>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<div class="text">ahamo</div>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<div class="text">LINEMO</div>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<div class="text">povo2.0</div>
</th>
</tr>
<tr style="border-top:0; padding-top:0;">
<th></th>
<th class="step" scope="col">
<ul class="planFunctionIcon">
<li class="data">データ</li>
</ul>
</th>
<th scope="col">
<ul class="planFunctionIcon">
<li class="data">データ</li>
</ul>
</th>
<th scope="col">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
<th scope="col" style="background-color: #F7F7F7;">
<ul class="planFunctionIcon">
<li class="voice">音声通話</li>
<li class="data">データ</li>
<li class="sms">SMS</li>
</ul>
</th>
</tr>
</tbody>
</table>
'''))
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.