Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
3 / 2 / 1
Регистрация: 12.02.2013
Сообщений: 130

Как прочитать один столбец из файла с расширением csv

14.02.2020, 20:06. Показов 1719. Ответов 8

Студворк — интернет-сервис помощи студентам
Здравствуйте! Задача такая: есть столбец в файле csv, каждое слово нужно прочитать и сравнить со словом из столбца таблицы базы данных mysql. Каждое слово из столбца определяю как масив. Уже пол часа сижу а скрипт 10 слов прочитать не может. Делал похожие скрипты (то есть использовал масив), все шустро обрабатывалось. Подскажите в чем может быть причина?

Вот столбец:

Boca Juniors
Obras Sanitarias
Instituto de Cordoba
La Union
Ferro
Penarol
Malaysia Dragons
Singapore Slingers
Alab Pilipinas
Macau Black Bears

Вот скрипт:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
    ini_set('max_execution_time', 0);
    ini_set('display_errors', true);
    error_reporting(-1);
    
    $db = mysqli_connect("localhost", "root", "xxxxxxxx","scorechart");
    mysqli_select_db($db,"scorechart");
    mysqli_set_charset($db,'utf8');
    
    $f = fopen("C:\Apache24\htdocs\Main2\No_In_DB_Insert_With_Check_Procedures_Insert_ID_RA\pop_clt.csv", "r");
    while (!feof($f))
        {
          /*  $arrM = explode(",",fgets($f));*/
            $query_select = "select team_eng from tteam where team_eng  = $arrM[0]"
            $result = mysqli_query($db,$query_select);
            $num_rows = mysqli_num_rows($result);
            if($num_rows == 0)
                {
                    echo "<br>------------------<br>".'$num_rows = '.$num_rows.'Команда не найдена!'.$arrM[0]."<br>------------------<br>";
                }
            else
                {
                    echo "<br>------------------<br>".'$num_rows = '.$num_rows.'Команда найдена'.$arrM[0]."<br>------------------<br>";
                }
        
        }
    fclose($f);
    mysqli_close($db);
?>
Добавлено через 57 минут
Нашел ошибку: слова в столбце должны быть в одинарных кавычках: 'Boca Juniors'.

Но все равно скрипт не работает.

Добавлено через 50 минут
Подскажите, если столбец в файле один, то как его читать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2020, 20:06
Ответы с готовыми решениями:

Прочитать и достать столбец из файла csv
Здравствуйте, такой вопрос: есть файл csv нужно из него взять конкретный столбец и записать в файл

Как правильно написать скрипт для чтения файла с расширением .csv(Excel) ?
как правильно написать скрипт для чтения файла с расширением .csv(Excel) пишу вот такой програмный код: &lt;? $count = 1; $file =...

Считывание данных из файла с расширением csv
Имеется файл с расширением csv, в этом файле данные записаны в один столбец. Надо написать программу, которая считывает данные из этого...

8
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,457
Записей в блоге: 2
14.02.2020, 22:41
Цитата Сообщение от Kaleos Посмотреть сообщение
= $arrM[0]"
Кроме кавычек нужен сложный способ включения сложных переменные в строках.

PHP
1
2
3
"= '{$arrM[0]}' "
//или
"= '${arrM[0]}'"
upd://
в csv не было кавычек/апострофов ?
, если были то просто = {$arrM[0]} наверное..
0
3 / 2 / 1
Регистрация: 12.02.2013
Сообщений: 130
15.02.2020, 10:51  [ТС]
Как я понял дело в этой строке:

PHP
1
$arrM = explode(",",fgets($f));
то есть она разбирает текст(строку) на массив, при этом разделитель ","-запятая. А я эту строку просто закоментил. У меня просто столбец в файле, у меня нет строки. Что писать вместо нее не знаю.
0
3 / 2 / 1
Регистрация: 12.02.2013
Сообщений: 130
15.02.2020, 17:48  [ТС]
Сделал файл из двух колонок, скрипт грузиться до бесконечности...

Файл с двумя колонками:

'Instituto de Cordoba','Esgueira'
'La Union','Vitoria W'
'Ferro','Olivais W'
'Penarol','Gdessa Barreiro W'
'Malaysia Dragons','Natacao W'
'Singapore Slingers','Guifoes W'

Разделитель запятая.

Скрипт:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
    ini_set('max_execution_time', 0);
    ini_set('display_errors', true);
    error_reporting(-1);
    
    $db = mysqli_connect("localhost", "root", "xxxxxxx","scorechart");
    mysqli_select_db($db,"scorechart");
    mysqli_set_charset($db,'utf8');
    
    $f = fopen("C:\Apache24\htdocs\Main2\List_Eng_Teams_Column.csv", "r");
    while (!feof($f))
        {
          $arrM = explode(",",fgets($f));
          
            $query_select1 = "select team_eng from tteam where team_eng  = $arrM[0]";
            $query_select2 = "select team_eng from tteam where team_eng  = $arrM[1]";
            
            $result1 = mysqli_query($db,$query_select1);
            $result2 = mysqli_query($db,$query_select2);
 
            $num_rows1 = mysqli_num_rows($result1);
            if($num_rows1 == 0)
                {
                    echo "<br>------------------<br>".'$num_rows = '.$num_rows1.'Команда не найдена!'.$arrM[0]."<br>------------------<br>";
                }
            else
                {
                    echo "<br>------------------<br>".'$num_rows = '.$num_rows1.'Команда найдена!'.$arrM[0]."<br>------------------<br>";
                }
            
            $num_rows2 = mysqli_num_rows($result2);
            if($num_rows2 == 0)
                {
                    echo "<br>------------------<br>".'$num_rows = '.$num_rows2.'Команда не найдена!'.$arrM[1]."<br>------------------<br>";
                }
            else
                {
                    echo "<br>------------------<br>".'$num_rows = '.$num_rows2.'Команда найдена!'.$arrM[1]."<br>------------------<br>";
                }
        }
    fclose($f);
    mysqli_close($db);
?>
0
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,457
Записей в блоге: 2
15.02.2020, 18:04
fgetcsv — Читает строку из файла и производит разбор данных CSV
Описание
PHP
1
fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]]] ) : array
Данная функция похожа на функцию fgets(), с той разницей, что она производит анализ строки на наличие записей в формате CSV и возвращает найденные поля в качестве массива.
или
str_getcsv — Выполняет разбор CSV-строки в массив

Описание
PHP
1
str_getcsv ( string $input [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]] ) : array
Данная функция выполняет разбор строки в формате CSV и возвращает массив с полученными из строки полями.
Там простые примеры примеры использования есть, если что, в мануале

Добавлено через 6 минут
После получения $arrM, обычно можно добавлять что-то типа
PHP
1
2
echo '<xmp>'. var_export($arrM, 1) ."</xmp>\n";
exit;
чтобы посмотреть что за массив, хотя-бы для первой строки
Цитата Сообщение от Kaleos Посмотреть сообщение
$arrM[0]";
то-же
{$arrM[0]}

Добавлено через 2 минуты
строки $arrM не существует
посмотрите $query_select1 после присвоения ей значения
PHP
1
2
echo '<xmp>'. var_export($query_select1, 1) ."</xmp>\n";
exit;
0
3 / 2 / 1
Регистрация: 12.02.2013
Сообщений: 130
15.02.2020, 18:15  [ТС]
x lab у меня практически идентичный скрипт он работает я его запускал пару недель назад, вот он:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
    ini_set('display_errors', true);
    error_reporting(-1);
    $hostname = "localhost";
    $username = "root";
    $password = "biribijan777";
    $dbName = "scorechart";
    $db = mysqli_connect("localhost", "root", "xxxxxxxx","scorechart");
    $f = fopen("C:\Apache24\htdocs\Main2\No_In_DB_Insert_With_Check_Procedures_Insert_ID_RA\qwerty.csv", "r");
 
    mysqli_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
    $conect = mysqli_connect($hostname,$username,$password);
 
    mysqli_select_db($db,"scorechart") or die(mysqli_error());
    mysqli_set_charset($db,'utf8');
 
    while (!feof($f))
        {
           $arrM = explode(",",fgets($f));
            /* foreach ($arrM as $key => $value)
                {
                    $arrM[$key] = iconv("windows-1251", "UTF-8",$value);
                }*/
 
            $query_select = "select * from `tgame` where `date` = $arrM[1]  and `teamh_rus` = $arrM[2] and `teama_rus` = $arrM[3] and `score_th` = $arrM[4] and `score_ta` = $arrM[5]";
            //echo "<br>------------------<br>".$query_select."<br>------------------<br>";
 
            $result = mysqli_query($db,$query_select);
 
            //echo "<br>------------------<br>".mysqli_error()."<br>------------------<br>";
 
            $num_rows = mysqli_num_rows($result);
            if($num_rows == 0)
                {
                    echo "<br>------------------<br>".'$num_rows = '.$num_rows.'  Дубликаты не найдены, будет встаквка новой записи!'.$arrM[1].'-'.$arrM[2].'-'.$arrM[3]."<br>------------------<br>";
                }
            else
                {
                    echo "<br>------------------<br>".'$num_rows = '.$num_rows.'  Есть дубликаты, вствка новой записи не будет!'.$arrM[1].'-'.$arrM[2].'-'.$arrM[3]."<br>------------------<br>";
                }
            if($num_rows == 0)
            {
                $query_insert="insert into `tgame` (`fk_idtleague`, `date`, `teamh_rus`, `teama_rus`, `score_th`, `score_ta`, `sp5_th`, `sp5_ta`,`Comment1`,`Comment2`)
                values
                (
                     $arrM[0],
                     $arrM[1],
                     $arrM[2],
                     $arrM[3],
                     $arrM[4],
                     $arrM[5],
                     $arrM[6],
                     $arrM[7],
                     $arrM[8],                  
                     $arrM[9]
                )";
                //echo "<br>------------------<br>".$query_insert."<br>------------------<br>";
                mysqli_query($db,$query_insert);
                //echo "<br>------------------<br>".mysqli_error()."<br>------------------<br>";
            }
            /*for ($i = 0; $i <= 8; $i++)
                {
                    echo $arrM[$i]." ";
                }
            echo "<br/>***************************************************************************************************************";*/
        }
    fclose($f);
    mysqli_close($db);
?>
Добавлено через 1 минуту
Цитата Сообщение от x_lab Посмотреть сообщение
строки $arrM не существует
посмотрите $query_select1 после присвоения ей значения
x lab у меня отладчик не пашет

Добавлено через 8 минут
Вообще отладчик работает, но в такой ситуации и похожих не работает. IDE Codelobster.
0
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,457
Записей в блоге: 2
15.02.2020, 19:13
Проверил у себя )) точно, $xxx[0] вообще-то распознала интерполяция в строках

Цитата Сообщение от Kaleos Посмотреть сообщение
грузиться до бесконечности...
Что-то не понимаю тогда в чём дело... если из-за проблем с fopen() , то вроде должно быть предупреждение
Code
1
2
3
$ /c/x/php/php -r 'var_dump(!feof(FALSE));'
PHP Warning:  feof() expects parameter 1 to be resource, bool given in Command line code on line 1
bool(true)
если в такой строке "C:\Apache24\htdocs\Main2\No_In_DB_Inser t_With_Check_Procedures_Insert_ID_RA\pop _clt.csv"
например попадётся после слеша буква которую проинтерпретирует например \n
Ошибки надо думать выводятся, ... в error_log ничего?
С отладчиками как-то не сталкивался )
0
3 / 2 / 1
Регистрация: 12.02.2013
Сообщений: 130
15.02.2020, 19:32  [ТС]
Спасибо. Буду думать.
0
3 / 2 / 1
Регистрация: 12.02.2013
Сообщений: 130
19.02.2020, 16:39  [ТС]
Причина не работы скрипта была в том что название php скрипта было на русском языке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2020, 16:39
Помогаю со студенческими работами здесь

Прочитать словарь из файла csv
Здравствуйте форумчане. Помогите разобраться: есть файл со списком аккаунтов в виде login;password (&quot;;&quot; - разделитель) f1...

Как прочитать csv файл с разделителем 'точка с запятой'?
просто сломал голову вот текст csv файла Точка;Назначение;НачисленнаяСумма;НомерЧека;Время;Аккаунт 16741;ЖКХ...

Как склеить 30 csv в один
Всем привет как склеить 30 csv файлов в один? При условии что в каждом файле есть шапка занимает 1 строчку и начиная со 2 файла эту...

Прочитать файл с расширением TDMS
в работе в программе на си нужно прочитать файл с таким расширение кто может подсказать что это за зверь никогда не встречал и как его...

Разбиение CSV файла на много csv файлов по разделителю
Здравствуйте, есть файл в который нужно разделить, но не ровно по 30 строк например, а по 25, 23, 27. Как это можно сделать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru